package jihyun51.swing;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class SwingProject extends JFrame {
	// 스윙 시나리오
	// 1. 프로그램 제목설정 : setTitle
	
	// 2. 프로그램 크기 및 위치 설정 : setBounds
	// x좌표, y좌표, 가로크기, 세로크기
	
	// 3. 프레임 크기 변경 불가 : setResizable
	
	// 4. 프로그램 아이콘 설정 : setIconImage
	
	// 5. splash 화면설정
	// META-INF 폴더에 MANIFEST.MF 파일작성 SplaxhScreen-Image : 항목추가
	// splash 화면 뜨는 시간 : Thread.sleep(2500)
	// File - export : java-jar
	
	// 6. Look And Feel 변경
	// 룩앤필 : GUI 측면과 디자인 구성에 사용하는 용어
	// 즉 색상, 모양, 레이아웃, 서체, 버튼 메뉴등의 동적요소를 의미
	// Swing에서 제공하는 룩앤필은 밋밋하기 때문에 이것을 교체하는 특별한 API를 제공
	// UIManager.setLookAndFeel()
	
	// 7. 프레임 닫기 이벤트 처리
	// 프레임 닫기 시 이벤트를 걸고 싶으면 WindowListener - windowClosing을 사용
	// 하지만, 편의성을 위해 WingdowAdapter를 사용하는 것을 추천
	
	// 8. 메뉴추가
	//		추가순서 : JMenuBar - JMenu - JMenuItem
	// JMenuBar 객체생성 - JFrame에 setJMenuBar로 등록
	// JMenu 객체 생성 - JMenuBar에 add로 등록
	// JMenuItem 객체 생성 - JMenu에 add로 등록
	// JMenuItem의 setIcon을 이용해서 아이콘 등록
	// JmenuItem의 setEnable을 이용해서 메뉴 활성 여부 지정
	// JmenuItem의 addActionListener을 이용해서 메뉴 클릭시 처리할 이벤트 지정
	
	// 9. 대화상자 표시
	// JDialog를 이용해서 대화상자를 만들고 setVisible로 화면에 표시
	// JDialog 창을 닫을때는 dispose() 이용
	
	// 10. JLabel
	//문자열을 출력할때 또는 이미지를 출력할 때 사용.
	//이미지 출력시 setIcon을 이용. 그림이 클 경우 나머지 영역은 잘려서 보이지 않을 수 있다.
	// 문자열 출력시 setText를 이용. 여러줄 출력시 <html><pre>내용은 이 안에 작성한다.</pre></html>
	// 글자 색상은 setforeground로 글자 폰트나 모양은 setFont로 설정

	// 11. 화명 정중앙에 표시
	// setLocationRelativeTo(null)로 설정
	private JPanel contentPane;

	// 6.a
	private static final String METAL = "javax.swing.plaf.metal.MetalLookAndFeel";
	private static final String NIMBUS = "javax.swing.plaf.nimbus.NimbusLookAndFeel";

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Thread.sleep(2500); // 5.

					// 록앤필 변경시작 6.b
					JFrame.setDefaultLookAndFeelDecorated(true);
					JDialog.setDefaultLookAndFeelDecorated(true); // 6c
					// UIManager.setLookAndFeel(NIMBUS);
					UIManager.setLookAndFeel(METAL);
					// 룩앤필 변경 끝 6.b

					SwingProject frame = new SwingProject();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SwingProject() {
		setIconImage(Toolkit.getDefaultToolkit().getImage(
				"D:\\images\\icon\\icon.png"));
		setTitle(":: 스윙프로젝트v1 ::"); // 1
		// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //7.
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 7.
		// 7. 닫기버튼 클릭시 이벤트 처리 시작
		addWindowListener(
		// 윈도우(frame) 발생하는 이벤트를 감지하기 위해 WindowListener추가

		new WindowAdapter() {
			// 이벤트 발생시 그것을 처리하는 메서드를 호출하기 위해
			// 기본 클래스로 정의된 WindowAdapter 클래스 생성
			public void windowClosing(java.awt.event.WindowEvent e) {
				JFrame f = (JFrame) e.getSource();
				// 이벤트를 발생시킨 주체가 누군지 알아냄
				int choice = JOptionPane.showConfirmDialog(f, "진짜 끕니까?",
						"끌려고 하네요.", JOptionPane.YES_NO_OPTION);
				// 확인,취소버튼으로 이루어진 대화상자를 모달창으로 표시
				// 일반창은 작업을 진행해도 띄워져 있는 창이고
				// 모달 창은 작업이 진행되지 않는 창이다.

				if (choice == JOptionPane.YES_NO_OPTION)
					f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				// 대화상자에서 '확인' 버튼을 클릭하면 현재 프레임을 닫고 프로그램 종료

			} // closing
				// 윈도우가 닫히는 이벤트 발생시 WindowClosing 메서드로 처리

		} // adapter
		);
		// 7. 닫기버튼 클릭시 이벤트 처리 끝

		setBounds(100, 100, 800, 600); // 2
		// 사이즈 자동조절 불가하게 하기
		setResizable(false); // 3
		setLocationRelativeTo(null); //11.
		
		// 8. 메뉴추가시작 
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnFile = new JMenu(" 파일 (F) ");
		menuBar.add(mnFile);
		
		JMenuItem miNew = new JMenuItem(" 새로 만들기 (N) ");
		miNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showConfirmDialog(null, "준비중입니당.");
				// 간단한 메세지 대화상자 출력
			}
		});
		miNew.setIcon(new ImageIcon(SwingProject.class.getResource("/images/menu/new.png")));
		mnFile.add(miNew);
		
		JMenuItem miOpen = new JMenuItem(" 열기 (O) ");
		miOpen.setIcon(new ImageIcon(SwingProject.class.getResource("/images/menu/close.png")));
		mnFile.add(miOpen);
		
		JMenuItem miSave = new JMenuItem(" 저장 (S) ");
		mnFile.add(miSave);
		
		JMenuItem miPrint = new JMenuItem(" 인쇄 (P) ");
		mnFile.add(miPrint);
		
		JMenuItem miExit = new JMenuItem(" 끝내기 (X) ");
		miExit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int choice = JOptionPane.showConfirmDialog(null,"종료하실겁니까?", "종료합니다.", JOptionPane.YES_NO_OPTION);
						if (choice == JOptionPane.YES_NO_OPTION)
				System.exit(0);
			}
		});
		mnFile.add(miExit);
		
		JMenu mnEdit = new JMenu(" 편집 (E) ");
		menuBar.add(mnEdit);
		
		JMenuItem mnUndo = new JMenuItem(" 실행취소 (U) ");
		mnUndo.setEnabled(false);
		mnEdit.add(mnUndo);
		
		JMenuItem mnCut = new JMenuItem(" 잘라내기 (C) ");
		mnCut.setEnabled(false);
		mnEdit.add(mnCut);
		
		JMenuItem miCopy = new JMenuItem(" 복사 (C) ");
		miCopy.setEnabled(false);
		mnEdit.add(miCopy);
		
		JMenuItem miPast = new JMenuItem(" 붙여넣기 (P) ");
		mnEdit.add(miPast);
		
		JMenuItem miDelete = new JMenuItem(" 삭제 (D) ");
		mnEdit.add(miDelete);
		
		JMenu mnView = new JMenu(" 보기 (V) ");
		menuBar.add(mnView);
		
		JMenuItem miBar = new JMenuItem(" 상태 표시줄 (S) ");
		mnView.add(miBar);
		
		JMenu mnTool = new JMenu(" 도구 (T) ");
		menuBar.add(mnTool);
		
		JMenuItem miSerch = new JMenuItem(" 검색 (S) ");
		mnTool.add(miSerch);
		
		JMenuItem miOption = new JMenuItem(" 옵션 (O) ");
		mnTool.add(miOption);
		
		JMenu mnHelp = new JMenu(" 도움말 (H) ");
		menuBar.add(mnHelp);
		
		JMenuItem miAbout = new JMenuItem(" 스윙프로젝트에 관하여  ");
		miAbout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AboutProject about = new AboutProject();
				about.setVisible(true); // 9
			}
		});
		mnHelp.add(miAbout);
		
		JMenu menu = new JMenu(" 배치관리자 ");
		menuBar.add(menu);
		
		JMenuItem miFlow = new JMenuItem(" Flow Layout (F)");
		miFlow.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Flow_Layout flow = new Flow_Layout();
				flow.setVisible(true);
			}
		});
		menu.add(miFlow);
		
		JMenuItem miBorder = new JMenuItem(" Border Layout (B) ");
		miBorder.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Border_Layout border = new Border_Layout();
				border.setVisible(true);
			}
		});
		menu.add(miBorder);
		
		JMenuItem miCard = new JMenuItem(" Card Layout (C) ");
		miCard.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Card_Layout card = new Card_Layout();
				card.setVisible(true);
			}
		});
		menu.add(miCard);
		
		JMenuItem miGrid = new JMenuItem(" Grid Layout (G) ");
		miGrid.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Grid_Layout grid=new Grid_Layout();
				grid.setVisible(true);
			}
		});
		menu.add(miGrid);
		
		JMenu mnComp = new JMenu(" 컴퍼넌트 (C) ");
		menuBar.add(mnComp);
		
		JMenuItem miBComp = new JMenuItem(" 기본 컴퍼넌트 (B) ");
		miBComp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			  BComp bc=new BComp();
			  bc.setVisible(true);
			}
		});
		mnComp.add(miBComp);
		
		JMenuItem miAComp = new JMenuItem(" 고급 컴퍼넌트 (A) ");
		miAComp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AComp ac=new AComp();
				ac.setVisible(true);
			}
		});
		mnComp.add(miAComp);
		
		JMenuItem miJtable = new JMenuItem(" JTable (T) ");
		miJtable.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		mnComp.add(miJtable);
		
		JMenu mnJdbcj = new JMenu("JDBC (J)");
		menuBar.add(mnJdbcj);
		
		JMenuItem mntmNewMenuItem = new JMenuItem(" 데이터 입력 ");
		mnJdbcj.add(mntmNewMenuItem);
		
		JMenuItem mntmNewMenuItem_1 = new JMenuItem(" 데이터 조회/수정/삭제 ");
		mnJdbcj.add(mntmNewMenuItem_1);
		
		JMenuItem mntmNewMenuItem_3 = new JMenuItem(" 우편번호검색 ");
		mnJdbcj.add(mntmNewMenuItem_3);
		
		JMenuItem mntmNewMenuItem_2 = new JMenuItem(" 이미지 처리 ");
		mnJdbcj.add(mntmNewMenuItem_2);
		//8. 메뉴추가 끝
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

}
